﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace MailServer.Client {
    /// <summary>
    /// Clase para el envio y revision de correos...
    /// </summary>
    [Serializable]
    public class Data {

        private string user;
        private Wrap wrap;

        public Data(string user, Server.Server server) {
            this.wrap = new Wrap(server, user);
            this.user = user;
        }

        /// <summary>
        /// Metodo que consulta al servidor al fin de ver si el usuario tiene algun mensaje
        /// </summary>
        /// <returns>retorna la cantidad de mensajes que tiene el usuario</returns>
        public int CheckMessages() {
            return wrap.GetMessageWaitingServer(user);
        }

        /// <summary>
        /// Metodo que obtiene la informacion necesaria del usuario, crea un objteo de tipo message y lo envia al servidor
        /// </summary>
        /// <param name="to">Usuario destinatario</param>
        /// <param name="subject"></param>
        /// <param name="body"></param>
        public void SendMessage(string to, string subject, string body) {
            Message.Message message = new Message.Message(DateTime.Now.Ticks, user, to, subject, body, 1);
            wrap.Post(message);
        }

        public List<Message.Message> ListMessages() {
            return wrap.List(user);
        }

        public List<Message.Message> ListMessagesFrom(string from) {
            return wrap.ListFrom(user, from);
        }

        public void SetReaded(Message.Message message) {
            wrap.SetReaded(message);
        }

        public bool IsReaded(Message.Message message) {
            return wrap.IsReaded(message);
        }

        public int GetMessageWaitingServer() {
            return wrap.GetMessageWaitingServer(user);
        }

        public void SyncMessages() {
            wrap.SyncMessages(user);
        }

        public void RemoveMessage(Message.Message message) {
            wrap.RemoveMessage(message);
        }

        public void Post(string to, string subject, string body) {
            Message.Message message = new Message.Message(DateTime.Now.Ticks, user, to, subject, body, 1);
            wrap.Post(message);
        }

    }
}
